package com.itlong.cloud.operate.dao;

import com.itlong.cloud.POJO.DTO.operate.OperateBusinessChargeDTO;
import com.itlong.cloud.POJO.PO.*;
import com.itlong.cloud.POJO.VO.operate.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <desc>
 *      运营-商务收费管理持久层接口
 * </desc>
 *
 * @createDate 2019/08/06
 */
@Mapper
@Repository
public interface IOperateBusinessChargeDao {

    /**
     * <desc>
     *      分页获取商务收费信息
     * </desc>
     *
     * @param params 查询参数
     * @return 商务收费信息列表
     * @author wangzhi
     * @createDate 2019/08/06
     */
    List<OperateBusinessChargeVO> getPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取商务收费信息总记录数
     * </desc>
     *
     * @param params 查询参数
     * @return 商务收费信息总记录数
     * @author wangzhi
     * @createDate 2019/08/06
     */
    Integer getRecordCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取商务收费信息详情
     * </desc>
     *
     * @param orderIdList 订单列表
     * @return 商务收费信息详情
     * @author wangzhi
     * @createDate 2019/08/06
     */
    List<OperateBusinessChargeVO> getOne(List<String> orderIdList);

    /**
     * <desc>
     *      保存
     * </desc>
     *
     * @param map 参数集
     * @return 保存的行数
     * @author wangzhi
     * @createDate 2019/08/07
     */
    Integer save(Map<String, Object> map);

    /**
     * <desc>
     *      修改
     * </desc>
     *
     * @param map 参数集
     * @return 保存的行数
     * @author wangzhi
     * @createDate 2019/08/07
     */
    Integer update(Map<String, Object> map);

    /**
     * <desc>
     *      删除商务收费信息
     * </desc>
     *
     * @param operateBusinessChargeDTO 商务收费信息DTO
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/08/07
     */
    Integer delete(OperateBusinessChargeDTO operateBusinessChargeDTO);

    /**
     * <desc>
     *      查询物业信息
     * </desc>
     *
     * @param operateBusinessChargeDTO 商务收费信息DTO
     * @return 物业信息
     * @author wangzhi
     * @createDate 2019/08/07
     */
    OperatePropertyInformationGetVO getPropertyInformation(OperateBusinessChargeDTO operateBusinessChargeDTO);

    /**
     * <desc>
     *      获取批次号下未缴账单
     * </desc>
     *
     * @param batchNumberList 批次号列表
     * @return 批次号下未缴账单
     * @author wangzhi
     * @createDate 2019/11/25
     */
    PropertyCloudServiceCostOrderInfoPO getNoPayCost(List<String> batchNumberList);

    /**
     * <desc>
     *      获取当日最大批次号
     * </desc>
     *
     * @param nowDay 当日日期
     * @return 最大批次号
     * @author wangzhi
     * @createDate 2019/11/25
     */
    String getMaxBatchNumberNowDay(@Param("nowDay") String nowDay);

    /**
     * <desc>
     *      批量保存收费明细数据
     * </desc>
     *
     * @param propertyCloudServiceCostOrderDataPOList 收费明细数据
     * @return 0 失败，1 成功
     * @author wangzhi
     * @createDate 2019/11/25
     */
    Integer batchSaveOrderData(List<PropertyCloudServiceCostOrderDataPO> propertyCloudServiceCostOrderDataPOList);

    /**
     * <desc>
     *      获取运营该用户信息
     * </desc>
     *
     * @param myUserName 用户id
     * @return 用户信息
     * @author wangzhi
     * @createDate 2019/11/25
     */
    OperateUserInfoPO getOperateUserPO(@Param("userId") String myUserName);

    /**
     * <desc>
     *      批量删除收费明细数据
     * </desc>
     *
     * @param operateBusinessChargeDTO 商务收费信息DTO
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/11/25
     */
    Integer batchDeleteOrderData(OperateBusinessChargeDTO operateBusinessChargeDTO);

    /**
     * <desc>
     *      获取该批次号已录入数据的最大结束时间
     * </desc>
     *
     * @return 该批次号已录入数据的最大结束时间
     * @author wangzhi
     * @createDate 2019/11/25
     */
    Map<String,Object> getMaxEndTime(OperateBusinessChargeDTO operateBusinessChargeDTO);

    /**
     * <desc>
     *      查询该批次号下的一条账单
     * </desc>
     *
     * @return 该批次号下的一条账单
     * @author wangzhi
     * @createDate 2019/11/25
     */
    PropertyCloudServiceCostOrderInfoPO getCloudCostByBatchNumber(@Param("batchNumber") String batchNumber);

    /**
     * <desc>
     *      批量保存任务书信息数据
     * </desc>
     *
     * @param propertyCloudServiceAssignmentDataPOList 任务书信息数据
     * @return 0 失败，1 成功
     * @author wangzhi
     * @createDate 2019/11/25
     */
    Integer batchSaveAssignmentData(List<PropertyCloudServiceAssignmentDataPO> propertyCloudServiceAssignmentDataPOList);

    /**
     * <desc>
     *      批量删除说明书信息数据
     * </desc>
     *
     * @param operateBusinessChargeDTO 商务收费信息DTO
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/11/26
     */
    Integer batchDeleteAssignmentData(OperateBusinessChargeDTO operateBusinessChargeDTO);

    /**
     * <desc>
     *      批量审核
     * </desc>
     *
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/11/26
     */
    Integer audit(@Param("orderIdList") List<String> orderIdList, @Param("businessAuditStatus") Integer businessAuditStatus);

    /**
     * <desc>
     *      批量保存操作日志数据
     * </desc>
     *
     * @return 0 失败，1 成功
     * @author wangzhi
     * @createDate 2019/11/26
     */
    Integer batchSaveOperationLogData(List<OperationSpecialLogPO> operationSpecialLogPOList);

    /**
     * <desc>
     *      获取业务日志列表
     * </desc>
     *
     * @return 业务日志列表
     * @author wangzhi
     * @createDate 2019/11/26
     */
    List<OperateBusinessOperationLogVO> getLogPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取业务日志列表总记录数
     * </desc>
     *
     * @return 业务日志列表总记录数
     * @author wangzhi
     * @createDate 2019/11/26
     */
    Integer getLogRecordCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取设备详情列表
     * </desc>
     *
     * @return 设备详情列表
     * @author wangzhi
     * @createDate 2019/11/26
     */
    List<OperateBusinessDeviceVO> getDevicePage(Map<String, Object> params);

    /**
     * <desc>
     *      获取设备详情总记录数
     * </desc>
     *
     * @return 设备详情总记录数
     * @author wangzhi
     * @createDate 2019/11/26
     */
    Integer getDeviceRecordCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取上期收费金额，即对应批次号的最后一条账单
     * </desc>
     *
     * @return 上期收费金额
     * @author wangzhi
     * @createDate 2019/12/02
     */
    List<OperateBusinessChargeVO> getPrePaidAmount(List<String> orderIdList);

    /**
     * <desc>
     *      获取对应批次号的最后一条账单id
     * </desc>
     *
     * @return 最后一条账单id列表
     * @author wangzhi
     * @createDate 2019/12/02
     */
    List<String> getLastList(Set<String> batchNumberSet);

    /**
     * <desc>
     *      获取项目id和名称
     * </desc>
     *
     * @return 项目id和名称
     * @author wangzhi
     * @createDate 2019/12/04
     */
    Map<String,Object> getProjectIdAndName(@Param("projectId") String projectId);

    /**
     * <desc>
     *      打印或详情时获取上期收费金额
     * </desc>
     *
     * @return 上期收费金额
     * @author wangzhi
     * @createDate 2019/12/04
     */
    OperateBusinessChargeVO getPrePaidAmountForDetail(@Param("orderId") String orderId);

    /**
     * <desc>
     *      获取被多条复用的old_batch_number连接字符串
     * </desc>
     *
     * @return 被多条复用的old_batch_number连接字符串
     * @author wangzhi
     * @createDate 2019/12/12
     */
    String getOldBatchNumberConcat(Set<String> batchNumberSet);

    /**
     * <desc>
     *      批量修改设备批次号
     * </desc>
     *
     * @param list 设备批次号列表
     * @return
     * @Author Zhu.yj
     * @createDate  2020/11/30
     */
    Integer batchUpdateDeviceBatchNumber(List<DeviceBatchNumberDTO> list);

    /**
     * <desc>
     *      批量保存商务收费订单
     * </desc>
     *
     * @param list 云服务费订单列表捋捋
     * @return
     * @Author Zhu.yj
     * @createDate  2020/12/3
     */
    Integer batchSaveOrderInfo(List<PropertyCloudServiceCostOrderInfoPO> list);

    /**
     * <desc>
     *      批量修改订单信息
     * </desc>
     *
     * @param list 待修改的云服务费订单列表
     * @return
     * @Author Zhu.yj
     * @createDate  2020/12/22
     */
    Integer batchUpdateOrderInfo(List<Map<String, Object>> list);

    /**
     * <desc>
     *      根据项目id获取批次号列表
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @Author Zhu.yj
     * @createDate  2021/1/4
     */
    List<String> getBatchNumberByProjectId(@Param("projectId") String projectId);
}
